export default {
  // 设置登录状态
  setIsLogin (state, isLogin) {
    if (isLogin) {
      window.sessionStorage.setItem('isLogin', true)
      state.isLogin = true
    } else {
      state.isLogin = false
      window.sessionStorage.setItem('isLogin', false)
    }
  },
  // 保存个人账户和用户信息,像昵称之类的
  saveUserInfo (state, { account, profile, cookie }) {
    // this.account = account
    // this.profile = profile
    // state.isLogin = loginState 登录状态应该用session存起来,这样一刷新就没了
    state.account = account
    state.profile = profile
    state.cookie = encodeURIComponent(cookie)
    window.sessionStorage.setItem('account', account)
    window.sessionStorage.setItem('profile', profile)
    window.sessionStorage.setItem('cookie', cookie)
  },
  // 保存用户歌单信息
  savePlayList (state, playList) {
    state.playList = playList
    window.sessionStorage.setItem('playList', playList)
  },
  /* 播放音乐有关start */
  // 改变播放状态
  setPlayState (state, isPlay) {
    state.isPlay = isPlay
  },
  // 播放单首音乐时的一系列操作
  playSingleSong (state, song) {
    // 问题:得找个办法先清空播放的歌曲id,不然点击同一首歌没反应,刷新后点同一首也没反应,可能是我保存了vuex的东西,让他刷新后也在
    // 还得先判断播放的单首歌是否已经在播放列表中,不判断的话,会一直插入同一首歌
    const isAlreadyExist = state.musicList.findIndex(item => item.id === song.id)
    if (isAlreadyExist !== -1) {
      // 在播放列表中
      state.curSong.songInfo = song // 改成播放当前歌曲,
      state.curIndex = isAlreadyExist // 播放位置变成那首歌所在下标
    } else {
      // 不在播放列表,即isAlready === -1
      // if (state.musicList.length === 0) { // 避免播放列表没歌时,插入歌后,curIndex不是在0,而是在1
      //   // state.curIndex = 0 怕出事可以先重置当前下标,不然没歌了下标还是别的,(有另一个方案,让curIndex初始值为-1)
      //   state.musicList.splice(state.curIndex, 0, song)
      //   state.curSong.songInfo = song
      // } else {
      state.musicList.splice(state.curIndex + 1, 0, song) // 向当前播放位置后一个插入歌曲id,空数组是splice会直接插入最前面
      state.curIndex += 1 // 播放位置改变,后移一个
      state.curSong.songInfo = song
    }
  },
  // 设置歌曲总时长,总时长在curSong的songInfo里,不用重复写了
  // setTotalTime (state, totalTime) {
  //   state.curSong.totalTime = totalTime
  // },
  // 当前播放的时刻
  setCurTime (state, curTime) {
    state.curSong.curTime = curTime
  },
  // 播放整个专辑
  playAlbumSong (state, songs) {
    // songs是歌曲id数组
    // 播放列表更新,变成当前专辑id数组
    state.musicList = songs
    // 从第一首开始播放
    state.curSongId = songs[0]
    state.curIndex = 0
  },
  // 改变当前播放歌曲
  setCurSong (state, song) {
    state.curSong.songInfo = song
  },
  setMusicUrl (state, url) {
    state.musicUrl = url
  },
  // 改变当前播放歌曲的位置
  setCurIndex (state, curIndex) {
    state.curIndex = curIndex
  },
  /* 播放音乐有关end */
  // 设置最近播放
  setHistory (state, payload) {
    if (payload.type === 'update') {
      // 更新播放历史,把放的歌放的数组第一位,顺便存到localstorage里
      // 先看看歌曲是否已经在历史中,这里使用findIndex比find好,前者返回下标可以和splice配合使用,把歌曲移到前面并顺便删掉它原来的地方,而find返回的值就麻烦一些
      const isAlreadyExist = state.historyList.findIndex(item => item.id === payload.data.id)
      if (isAlreadyExist !== -1) {
        // 已经存在,先splice在移到前面,如果先移到前面,数组各个元素下标就改变了(都会+1,因为在头部插了个元素),要删除的话就得在原位置加一
        // 如果先删除元素,就没法用下标读取值来unshift,因为已经被删掉了,只能用新传入的data来unshift,而后一种方法就可以使用下标,也可以使用data
        state.historyList.splice(isAlreadyExist, 1)
        state.historyList.unshift(payload.data)
      } else {
        // 不存在
        state.historyList.unshift(payload.data)
      }
      // 保存到本地
      window.localStorage.setItem('historyList', JSON.stringify(state.historyList))
    } else if (payload.type === 'clear') {
      // 清空历史
      state.historyList = []
      window.localStorage.setItem('historyList', JSON.stringify(state.historyList))
    }
  }
}
